﻿/*******************************************************
* Copyright (c) 2018-2088, By XuXiang all rights reserved.
*
* FileName: UserInfo.h
* Summary: 登陆的用户信息。
*
* Author: XuXiang
* Date: 2024-04-10 15:16
*******************************************************/

#ifndef __UserInfo_h__
#define __UserInfo_h__

#include <map>
#include <vector>
#include <string>
#include <Macro.h>
using namespace std;

namespace Competition
{
	class UserInfo
	{
	public:
		UserInfo(int user_id);

		//角色ID序号占位
		static const int ROLE_ID_STAMP_BIT;

		//下一个角色创建标记
		static int NextRoleStamp;

		//获取新的角色ID
		static int GetNewID();

		//检测角色名称是否合法
		static bool CheckRoleName(const std::string& name);

		//获取昵称
		inline const string& GetNickName()const { return m_NickName; }
		//设置昵称
		inline void SetNickName(const string& name) { m_NickName = name; }

		//获取连接标识
		inline const UInt64 GetUID()const { return m_UID; }
		//设置连接标识
		inline void SetUID(UInt64 uid) { m_UID = uid; }

		//获取用户id
		inline const int GetUserID()const { return m_UserID; }
		//设置用户id
		inline void SetUserID(int uid) { m_UserID = uid; }

		//获取设备标识
		inline const string& GetDeviceID()const { return m_DeviceID; }
		//设置设备标识
		inline void SetDeviceID(const string& did) { m_DeviceID = did; }

		//获取创建时间
		inline const UInt64 GetCreateTime()const { return m_CreateTime; }
		//设置创建时间
		inline void SetCreateTime(UInt64 create_time) { m_CreateTime = create_time; }

		//获取最后登录时间
		inline const UInt64 GetLastLoginTime()const { return m_LastLoginTime; }
		//设置最后登录时间
		inline void SetLastLoginTime(UInt64 login_time) { m_LastLoginTime = login_time; }

		//获取最后退出时间
		inline const UInt64 GetLastQuitTime()const { return m_LastQuitTime; }
		//设置最后退出时间
		inline void SetLastQuitTime(UInt64 quit_time) { m_LastQuitTime = quit_time; }

		//设置离线 delay:销毁延迟 can_recon:是否可重连
		void SetOutline(int delay, bool can_recon);

		//获取退出时间戳
		inline Int64 GetQuitTimeStamp()const { return m_QuitTimeStamp; }

		//设置重连token
		inline void SetReconToken(const string& token) { m_ReconToken = token; }

		//获取重连token
		inline const string& GetReconToken()const { return m_ReconToken; }

	private:

		//连接标识
		UInt64 m_UID;

		//用户ID。
		int m_UserID;

		//用户昵称
		string m_NickName;

		//设备ID。
		string m_DeviceID;

		//创建时间。
		Int64 m_CreateTime;

		//最后登录时间。
		Int64 m_LastLoginTime;

		//最后退出时间。
		Int64 m_LastQuitTime;

		//退出的时间
		Int64 m_QuitTimeStamp;

		//重连Token
		string m_ReconToken;
	};
	typedef map<int, UserInfo*> UserInfoMap;
	typedef vector<UserInfo*> UserInfoVector;
}

#endif